package com.ucampus.service;

import com.ucampus.dao.VerificationCodeMapper;
import com.ucampus.dao.userRegisterMapper;
import com.ucampus.entity.userRegister;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;

import java.security.DigestInputStream;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

/**
 * 功能：
 * 作者： 启明星_Polaris
 * 日期：2025/1/7 下午3:13
 **/

@Service
public class userRegisterServiceImpl implements userRegisterService{
    @Autowired
    private userRegisterMapper userRegisterMapper;

    @Autowired
    private VerificationCodeService verificationCodeService;

    @Override
    public boolean registerUser(String userPhone, String userpassword, String code) {
        // 验证验证码是否生效
        if(!verificationCodeService.verifyCode(userPhone,code)) {
            return false; // 无效或者过期
        }

        // 1. 生成10位以内的随机ID（范围：100000000-200000000，且唯一）
        long userId = generateUniqueUserId();

        // 2.加密用户密码（MD5加密 更新版）
        String firstMd5 = DigestUtils.md5DigestAsHex(userpassword.getBytes());

        // 获取原始密码的倒序
        String reversedPassword = new StringBuilder(userpassword).reverse().toString();

        String encryptedPassword = reversedPassword + firstMd5;

        // 3.插入user和userinfo
        try{
            // 插入user表
            userRegisterMapper.insertUser(userId,userPhone,encryptedPassword);
            // 插入user表
            userRegisterMapper.insertUserInfo(userId,userPhone);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }
    }

    private long generateUniqueUserId() {
        int maxAttempts = 1000; // 最大尝试次数，防止死循环
        int attempts = 0;

        while (attempts < maxAttempts) {
            // 在范围 [100000000, 200000000) 生成随机数
            long userId = ThreadLocalRandom.current().nextLong(100000000L, 200000000L);

            // 检查数据库中是否已存在
            if (!userRegisterMapper.userIdExists(userId)) {
                return userId; // 唯一 ID，返回
            }
            attempts++;
        }

        // 如果超过最大尝试次数，抛出异常
        throw new RuntimeException("Failed to generate unique user ID after " + maxAttempts + " attempts");
    }

}
